package com.gonsin.gview.logic.services;

import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 用于在最后阶段绑定actionName和dataSource
 *
 * 由于添加动态view，或者加载文件view的过程中，服务器初始化未完成
 * 为了解决查找不到对应的dataSource或者actionName
 * 将准备要匹配的dataSource/actionName先存在本类中
 *
 * 等待系统初始化完成之后，再重新匹配关系
 */
@Component
public class GViewFutureBindingService {

    /**
     * 在初始化所有action和dataSource时执行
     */
    private List<Runnable> afterAction = new ArrayList<>();

    /**
     * 在初始化所有view时候执行
     */
    private List<Runnable> afterView = new ArrayList<>();

    /**
     * 初始化完成之后，调用改 方法，校验和匹配actionName是否正确
     */
    public void runAfterAction(){
        for(Runnable runnable : afterAction){
            runnable.run();
        }
    }

    /**
     * 初始化完成之后，调用改 方法，校验和匹配actionName是否正确
     */
    public void runAfterView(){
        for(Runnable runnable : afterView){
            runnable.run();
        }
    }

    public void addAfterAction(Runnable future) {
        this.afterAction.add(future);
    }

    public void addAfterView(Runnable runnable) {
        this.afterView.add(runnable);
    }
}
